package com.hxrfid.common.utils;


import com.hxrfid.common.utils.redis.RedisUtils;
import org.springframework.stereotype.Component;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

@Component
public class IGenerateCodeService {

    private static final String format = "yyMMddHHmmss";

    private static final String SYS_GENERATE_CODE_CACHE = "sys:cache:generate:code:";

    public synchronized String generate() {
        String key = DateUtils.dateTimeNow(format);
        Long increment = RedisUtils.incrementAndGet(SYS_GENERATE_CODE_CACHE + key);
        return key + String.format("%03d", increment);
    }

    public synchronized String generate(String prefix) {
        prefix = StringUtils.isBlank(prefix) ? "" : prefix;
        String key = prefix + DateUtils.dateTimeNow(format);
        Long increment = RedisUtils.incrementAndGet(SYS_GENERATE_CODE_CACHE + key);
        return key + String.format("%03d", increment);
    }

    /**
     * 生成编码
     *
     * @param prefix 前缀
     * @param format 时间格式
     * @return 编码
     */
    public synchronized String generate(String prefix, String format) {
//        prefix = StringUtils.isBlank(prefix) ? "" : prefix;
//        format = StringUtils.isBlank(format) ? IGenerateCodeService.format : format;
//        String key = prefix + DateUtils.dateTimeNow(format);
//        return key;
        return this.generate(prefix, format, "");
    }

    /**
     * 生成编码
     *
     * @param prefix 前缀
     * @param format 时间格式
     * @param suffix 后缀
     * @return 编码
     */
    public synchronized String generate(String prefix, String format, String suffix) {
        prefix = StringUtils.isBlank(prefix) ? "" : prefix;
        format = StringUtils.isBlank(format) ? IGenerateCodeService.format : format;
        suffix = StringUtils.isBlank(suffix) ? "" : suffix;
        String key = prefix + DateUtils.dateTimeNow(format) + suffix;
        return key;
    }


    /**
     * 生成编码
     *
     * @param prefix 前缀
     * @param SuffixBit 后缀位数
     * @return 编码
     */
    public synchronized String generate(String prefix, int SuffixBit) {
        // 获取当前日期
        LocalDate currentDate = LocalDate.now();
        // 格式化为年月日字符串
        String dateStr = currentDate.format(DateTimeFormatter.ofPattern("yyMMdd"));

        Long increment = RedisUtils.incrementAndGetByDay(SYS_GENERATE_CODE_CACHE + prefix + dateStr);
        // 生成序列号
        String sequenceFormat = "%0" + SuffixBit + "d";
        // 动态生成格式化字符串
        return prefix + dateStr + String.format(sequenceFormat, increment);

//        // 判断是否跨天
//        if (!currentDate.equals(lastDate)) {
//            // 如果跨天，则重置序列号为0
//            sequence = 0;
//        }
//
//        String sequenceStr = String.format(sequenceFormat, getNextSequence(SuffixBit));
//        // 拼接编码
//        String code = prefix + dateStr + sequenceStr;
//        return code;
    }

}
